"""
# -*- coding: utf-8 -*-
# @Time    : 2023/6/14 9:53
# @Author  : 王摇摆
# @FileName: pipelne.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
Pipeline的属性永远和最后一个估计器属性一样：

如果最后一个估计器是预测器，那么Pipeline是预测器。
如果最后一个估计器是转换器，那么Pipeline是转换器。
"""
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import MinMaxScaler
import numpy as np

X = np.array([[56, 40, 30, 5, 7, 10, 9, np.NaN, 12],
              [1.68, 1.83, 1.77, np.NaN, 1.9, 1.65, 1.88, np.NaN, 1.75]])
X = np.transpose(X)
print('1. 数据集加载完毕')

mean_col1 = np.nanmean(X[:, 0])  # 第一列的非缺失值均值
mean_col2 = np.nanmean(X[:, 1])  # 第二列的非缺失值均值
print("第一列的均值:", mean_col1)
print("第二列的均值:", mean_col2)

# 处理缺失值的转换器SimpleImputer。
# 做规划化的转换器MinMaxScaler。
# 在这里使用元组的方式构建流水线，把估计器重新起一个名字 ，所以这里的pipline是转换器
pipe = Pipeline([('impute', SimpleImputer(missing_values=np.nan, strategy='mean')),
                 ('normalize', MinMaxScaler())])
print('2. 流水线创建完毕')

X_proc = pipe.fit_transform(X)
print('3. 数据集处理完毕')

print('=============处理后的数据================')
print(X_proc)
